package br.edu.ifrn.view;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import br.edu.ifrn.controller.TipoDocumentoEJB;
import br.edu.ifrn.model.Metadado;
import br.edu.ifrn.model.TipoDocumento;

@ManagedBean
@ViewScoped
public class TipoDocumentoMBean {

	private TipoDocumento tipoDocumento;
	private List<TipoDocumento> listaTipoDocumento;
	private Map<String,String> tipos;
	private SelectItem valorPadrao;
	
	
	public TipoDocumentoMBean() {
		tipoDocumento = new TipoDocumento();
		tipoDocumento.getMetadados().add(new Metadado());
		tipoDocumento.getMetadados().add(new Metadado());
		tipoDocumento.getMetadados().add(new Metadado());
		tipoDocumento.getMetadados().add(new Metadado());
	}

	@EJB
	private TipoDocumentoEJB tipoDocumentoEJB;

	@PostConstruct
	public void construct() {
		listaTipoDocumento = tipoDocumentoEJB.listar();
		valorPadrao = new SelectItem(new ValorPadrao());
		
	}
	
	public String index() {
		return "/tipoDocumento/index.xhtml";
	}
	
	public void actionCreateNew() {
        tipoDocumento.getMetadados().add(new Metadado());
    }

	public List<TipoDocumento> getListaTipoDocumento() {
		return listaTipoDocumento;
	}
	
	public Map<String, String> getMapTipoDocumento() {
		tipos = new HashMap<String, String>();
		for(TipoDocumento t : listaTipoDocumento){
			tipos.put(t.getDescricao(), t.getDescricao());
		}
		return tipos;
	}

	public TipoDocumento getTipoDocumento() {
		return tipoDocumento;
	}

	public TipoDocumento findTipoDocumento(Long id) {
		return tipoDocumentoEJB.find(id);
	}

	public void setTipoDocumento(TipoDocumento tipoDocumento) {
		this.tipoDocumento = tipoDocumento;
	}

	public void actionRemoverMetadado() {
		tipoDocumento.getMetadados().remove(tipoDocumento.getMetadados().size() -1);
	}

	public String actionSalvar() {
		try {
			tipoDocumentoEJB.salvar(tipoDocumento);
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_INFO,
							"Tipo de documento cadastrado com sucesso", null));
		} catch (Exception e) {
			FacesContext
					.getCurrentInstance()
					.addMessage(
							null,
							new FacesMessage(
									FacesMessage.SEVERITY_ERROR,
									"Tipo de documento não cadastrado, tente novamente",
									null));
		}

		return index();
	}

	
	public String actionRemover() {
		try {
			tipoDocumentoEJB.remover(tipoDocumento);
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_INFO,
							"Tipo de documento removido com sucesso", null));
		} catch (Exception e) {
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(FacesMessage.SEVERITY_ERROR,
							"Tipo de documento não removido, tente novamente",
							null));
		}

		return index();
	}

	public void actionLimpar() {
		tipoDocumento = new TipoDocumento();
	}

	public void setMetadados(List<Metadado> metadados) {
		tipoDocumento.setMetadados(metadados);
	}

	public List<Metadado> getMetadados() {
		return tipoDocumento.getMetadados();
	}

	public SelectItem getValorPadrao() {
		return valorPadrao;
	}

	public void setValorPadrao(SelectItem valorPadrao) {
		this.valorPadrao = valorPadrao;
	}
	
	
}
